迷宫问题
总提交:196 测试通过:137
描述
输入
输出
输出从起点到终点的最短路径,即最少走的步数。
样例输入
2 2
9 9
1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 1 0 1
1 0 0 1 0 0 0 1 0 1
1 0 0 0 0 1 1 0 0 1
1 0 1 1 1 0 0 0 0 1
1 0 0 0 1 0 0 0 0 1
1 0 1 0 0 0 1 0 0 1
1 0 1 1 1 0 1 1 0 1
1 1 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
样例输出
提示
算法3.4
题目来源
题目上传者
题目难度
5(0-9:0表示不确定,1表示最容易,依次逐难,9表示最难)
题目语言
CN(CN:中文 EN:英文 JP:日文)
#include<iostream>
#include<cstring>
using namespace std;
int n,m,start_x,start_y,end_x,end_y,flg[100][100],k[100][100],mi_n=9999;
void dsf(int x,int y,int step)
{
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int tx,ty,f;
if(x==end_x&&y==end_y)
{
if(step < mi_n)
mi_n=step;
return ;
}
for(f=0;f<=3;f++)
{
tx=x+next[f][0];
ty=y+next[f][1];
if(tx<1||tx>n||ty<1||ty>m)
continue;
if(k[tx][ty]==0&&flg[tx][ty]==0)
{
flg[tx][ty]=1;
dsf(tx,ty,step+1);
flg[tx][ty]=0;
}
}
return ;
}
int main()
{
int i,j;
cin>>n>>m;
cin>>start_x>>start_y;
cin>>end_x>>end_y;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>k[i][j];
flg[start_x][start_y]=1;
dsf(start_x,start_y,0);
cout<<mi_n<<endl;
getchar();
return 0;
}